package net.ifilm.service;

import net.ifilm.dao.*;
import net.ifilm.entity.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * User: <a href="wangjunneil@gmail.com">wangjun</a>
 * Date: 2012-08-08 22:11
 */
@Component
public class FilmService {

    @Autowired
    private FilmDao filmDao;

    @Autowired
    private StarDao starDao;

    @Autowired
    private FilmTypeDao filmTypeDao;

    @Autowired
    private FilmPathDao filmPathDao;

    @Autowired
    private FilmScoreDao filmScoreDao;

    @Autowired
    private FilmDiscussDao filmDiscussDao;

    @Autowired
    private UserDao userDao;

    @Autowired
    private SysParaDao sysParaDao;

    @Autowired
    private LeaveMessageDao leaveMessageDao;

    @Autowired
    private RegionDao regionDao;

    /**
     * 搜索时讲用户输入的关键字入库
     *
     * @param keyword 关键字
     */
    public void addHotKeyword(HotKeyword keyword) {
        filmDao.addHotKeyword(keyword);
    }

    /**
     * 更新关键字搜索次数
     *
     * @param hotKeyword
     */
    public void updateHotKeyword(HotKeyword hotKeyword) {
        filmDao.updateHotKeyword(hotKeyword);
    }

    /**
     * 按条件查询热门关键字列表
     *
     * @param parameter
     * @return
     */
    public List<HotKeyword> queryHotKeywordList(Map<String, Object> parameter) {
        return filmDao.queryHotKeywordList(parameter);
    }

    /**
     * 按条件查询关键字
     *
     * @param hotKeyword
     */
    public HotKeyword queryHotKeyword(HotKeyword hotKeyword) {
        return filmDao.queryHotKeyword(hotKeyword);
    }

    /**
     * 向数据库增加一条明星记录信息
     *
     * @param star 明星对象
     * @return 主键ID
     */
    public int addStar(Star star) {
        return starDao.insertStar(star);
    }

    /**
     * 关联电影与明星关系
     *
     * @param parameterMap 参数表
     */
    public void relFilmStar(Map<String, Object> parameterMap) {
        starDao.relFilmStar(parameterMap);
    }

    /**
     * 关联电影与类型的关系
     *
     * @param parameterMap 参数表
     */
    public void relFilmType(Map<String, Object> parameterMap) {
        filmTypeDao.relFilmType(parameterMap);
    }

    /**
     * 关联电影与电影路径的关系
     *
     * @param filmPath 电影路径关系表
     */
    public void relfilmpath(FilmPath filmPath) {
        filmPathDao.relfilmpath(filmPath);
    }

    public Film findFilmById(int filmId) {
        return filmDao.queryFilmById(filmId);
    }

    public List<FilmDiscuss> findFilmDiscussList(int filmId) {
        return filmDiscussDao.queryFilmDiscussList(filmId);
    }


    /**
     * 按播放次数查询首页排行数据
     *
     * <li>电影排行 - type=1</li>
     * <li>动漫排行 - type=4</li>
     * <li>电视剧排行 - type=2</li>
     * <li>综艺排行 - type=3</li>
     *
     * @param parameter
     * @return
     */
    public List<Film> queryFilmOrderPlayNum(Map<String, Object> parameter) {
        return filmDao.queryFilmOrderPlayNum(parameter);
    }

    public void addDiscuss(FilmDiscuss filmDiscuss) {
        filmDiscussDao.insertDiscuss(filmDiscuss);
    }


    public int findFilmDiscussCount(int filmId) {
        return filmDiscussDao.queryFilmDiscussCount(filmId);
    }

    public List<FilmDiscuss> findFilmDiscussSplit(PageCount pageCount) {
        return filmDiscussDao.queryFilmDiscussSplit(pageCount);
    }


    public void updateFilm(Film film) {
        filmDao.updateFilm(film);
    }

    public List<Film> roundQueryFilm(Map<String, Object> parameter) {
        return filmDao.roundQueryFilm(parameter);
    }

    /**
     * 根据电影ID删除电影纪录
     *
     * @param filmId
     */
    public void delFilmPath(int filmId) {
        filmPathDao.delFilmPath(filmId);
    }

    /**
     * 向数据库添加一条电影记录并返回生成的主键ID
     *
     * @param film 电影对象
     * @return  主键ID
     */
    public int addFilm(Film film) {
        return filmDao.insertFilm(film);
    }

    /**
     * 根据电影ID删除电影纪录
     *
     * @param filmId
     */
    public void delFilm(int filmId) {
        filmDao.deleteFilm(filmId);
    }

    /**
     * 根据电影ID删除此电影的所有评论
     *
     * @param filmId
     */
    public void delDiscuss(int filmId){
        filmDiscussDao.deleteDiscuess(filmId);
    }

    /**
     * 根据电影ID删除电影评分纪录
     *
     * @param filmId
     */
    public void delSocre(int filmId) {
        filmScoreDao.deleteSocre(filmId);
    }

    /**
     * 根据电影ID删除主演关联纪录
     *
     * @param filmId
     */
    public void delRelFilmStar(int filmId) {
        starDao.deleteRelFilmStar(filmId);
    }
    
    public void delRelFilmStar(Map<String, Object> parameter) {
        starDao.deleteRelFilmStar(parameter);
    }

    /**
     * 根据电影ID删除关联的电影类型
     *
     * @param filmId
     */
    public void delRelFilmType(int filmId) {
        filmTypeDao.deleteRelFilmType(filmId);
    }

    /**
     * 分页查询电影表纪录
     *
     * @param pageCount
     * @return
     */
    public List<Film> findSplitFilm(PageCount pageCount) {
        return filmDao.querySplitFilm(pageCount);
    }

    /**
     * 查询电影表总记录数
     *
     * @return
     */
    public int findFilmCount(Map<String, Object> parameter) {
        return filmDao.queryFilmCount(parameter);
    }

    /**
     * 通过电影名称进行模糊查询
     *
     * @return 查询结果的条目数
     */
    public List<Film> findFilm(Map<String, Object> parameter) {
        return filmDao.queryFilm(parameter);
    }

    /**
     * 查询所有电影类型列表
     *
     * @return 电影类型列表
     */
    public List<FilmType> findFilmTypeList() {
        return filmDao.queryFilmTypeList();
    }

    /**
     * 查询电影发行区列表
     *
     * @return 电影发行区列表
     */
    public List<Region> findRegionList() {
        return filmDao.queryRegionList();
    }

    /**
     * 根据明星名称查询记录
     *
     * @return 明星对象
     */
    public List<Star> findStar(Map<String, Object> parameter) {
        return starDao.queryStar(parameter);
    }

    /**
     * 改变电影状态，activeFlag、isLimit、isHot、isClear
     *
     * @param parameter
     */
    public void updFilmStatus(Map<String, Object> parameter) {
        filmDao.updateFilmStatus(parameter);
    }

    /**
     * 查询用户
     *
     * @param pageCount
     * @return
     */
    public List<User> findUser(PageCount pageCount) {
        return userDao.queryUser(pageCount);
    }

    public List<LeaveMessage> findLeaveMessage(PageCount pageCount) {
        return leaveMessageDao.queryLeaveMessage(pageCount);
    }

    public int findLeaveMessageCount() {
        return leaveMessageDao.queryLeaveMessageCount();
    }

    public int addLeaveMessage(LeaveMessage leaveMessage) {
        return leaveMessageDao.insertLeaveMessage(leaveMessage);
    }

    /**
     * 更新系统参数
     *
     * @param parameter
     */
    public void updateSystemParam(Map<String, Object> parameter) {
        sysParaDao.updateSystemParam(parameter);
    }

    /**
     * 更新区域名称
     *
     * @param parameter
     */
    public void updateRegionName(Map<String, Object> parameter) {
        regionDao.updateRegionName(parameter);
    }

} ///:~
